home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 1 / PC Actual CD 01.iso / f1 / func3d.arj / FUENTE / CALC87.AS_ / CALC87.AS
Encoding:
Text File  |  1994-05-09  |  17.8 KB  |  764 lines

  1. ;
  2. ;   Fichero: CALC87.ASM
  3. ;
  4. ;   Versi≤n: 1.0
  5. ;     Autor: Antonio M. EstΘvez Lorenzo
  6. ; Prop≤sito: Eval·a expresiones matemßticas
  7. ;
  8. ; Para ensamblar: TASM /ml [/dc87] calc87
  9. ;                      /ml   -> Sensible a may·sculas/min·sculas
  10. ;                      /dc87 -> Define la constante c87 (parßmetro opcional)
  11. ;                               Si no se incluye se emplerßn instruciones de
  12. ;                               emulaci≤n de coprocesador
  13.  
  14.          .MODEL   large, Pascal
  15.  
  16.           LOCALS  @@
  17.  
  18.          .286
  19.  
  20.           EMUL
  21.  
  22. ifdef c87
  23.          .287
  24. elseifdef C87
  25.          .287
  26. else
  27.           EMUL
  28. endif
  29.  
  30.           INCLUDE OBJECTS.INC
  31.           INCLUDE CALC87.INC
  32.  
  33.           Dominio = 0
  34.           Singular= 1
  35.           Overflow= 2
  36.  
  37.       EXTRN   C pow: FAR
  38.           EXTRN   C log: FAR
  39.           EXTRN   C DivisionPorCero: FAR
  40.           EXTRN   C ErrorFuncion: FAR
  41.  
  42.       EXTRN   C ErrorMatemat: WORD
  43.           EXTRN   C varN: QWORD
  44.  
  45.      .CONST
  46.  
  47. szOper    DB      0
  48. Cero      DT      1E-15
  49. Infinito  DT      1E15
  50. Dos       DT      2.0
  51. cteEnt    DW      1F3FH
  52.  
  53.          .DATA
  54.  
  55. IntTemp   DW      ?
  56.  
  57.          .CODE
  58.  
  59. szACOSH   DB      "acosh",0
  60. szATANH   DB      "atanh",0
  61. szFACT    DB      "fact", 0
  62.  
  63. asinh     PROC    C Num: QWORD
  64.           PUBLIC  C asinh
  65.           LOCAL   Tmp: QWORD
  66.           FLD     Num
  67.           FLD     ST(0)
  68.           FMUL    ST(0),ST
  69.           FLD1
  70.           FADDP
  71.           FSQRT
  72.           FADDP
  73.           FSTP    Tmp
  74.           CALL    log
  75.           RET
  76. asinh     ENDP
  77.  
  78. acosh     PROC    C Num: QWORD
  79.           PUBLIC  C acosh
  80.           LOCAL   Tmp: QWORD
  81.           FLD     Num
  82.           FLD1
  83.           FCOMP   ST(1)
  84.           FSTSW   AX
  85.           SAHF
  86.           JNBE    @@1
  87.           FLD     ST
  88.           FMUL    ST,ST
  89.           FLD1
  90.           FSUBP
  91.           FSQRT
  92.           FADDP
  93.           FSTP    Tmp
  94.           CALL    log
  95.           RET
  96. @@1:      PUSH    Dominio
  97.           PUSH    CS
  98.           PUSH    OFFSET szACOSH
  99.           SUB     SP,8
  100.           MOV     BX,SP
  101.           FSTP    QWORD PTR SS:[BX]
  102.           CALL    ErrorFuncion
  103.           FLD1
  104.           RET
  105. acosh     ENDP
  106.  
  107. atanh     PROC    C Num: QWORD
  108.           PUBLIC  C atanh
  109.           LOCAL   Tmp: QWORD
  110.           FLD     Num
  111.           FABS
  112.           FLD1
  113.           FCOMPP  ST(1)
  114.           FSTSW   AX
  115.           FLD     Num
  116.           SAHF
  117.           JC      @@2
  118.           JE      @@1
  119.           FLD1
  120.           FSUB    ST,ST(1)
  121.           FLD1
  122.           FADDP   ST(2),ST
  123.           FDIVP
  124.           FSTP    Tmp
  125.           CALL    log
  126.           FLD     Dos
  127.           FDIVP
  128.           RET
  129. @@1:      PUSH    Singular
  130.           JMP     SHORT @@3
  131. @@2:      PUSH    Dominio
  132. @@3:      PUSH    CS
  133.           PUSH    OFFSET szATANH
  134.           SUB     SP,8
  135.           MOV     BX,SP
  136.           FSTP    QWORD PTR SS:[BX]
  137.           CALL    ErrorFuncion
  138.           FLD1
  139.           RET
  140. atanh     ENDP
  141.  
  142. Negat     PROC    C Num: QWORD
  143.           PUBLIC  C Negat
  144.           FLD     Num
  145.           FCHS
  146.           RET
  147. Negat     ENDP
  148.  
  149. Inver     PROC    C Num: QWORD
  150.           PUBLIC  C Inver
  151.           FLD1
  152.           FLD     Num
  153.           FDIVP
  154.           RET
  155. Inver     ENDP
  156.  
  157. Abs       PROC    C Num: QWORD
  158.           PUBLIC  C Abs
  159.           FLD     Num
  160.           FABS
  161.           RET
  162. Abs       ENDP
  163.  
  164. Ent       PROC    C Num: QWORD
  165.           PUBLIC  C Ent
  166.           LOCAL   Temp: WORD
  167.           FLD     Num
  168.           FSTCW   Temp
  169.           FLDCW   cteEnt
  170.           FRNDINT
  171.           FLDCW   Temp
  172.           RET
  173. Ent       ENDP
  174.  
  175. Frac      PROC    C Num: QWORD
  176.           PUBLIC  C Frac
  177.           LOCAL   Temp: WORD
  178.           FLD     Num
  179.           FABS
  180.           FLD     ST(0)
  181.           FSTCW   Temp
  182.           FLDCW   cteEnt
  183.           FRNDINT
  184.           FLDCW   Temp
  185.           FSUBP   ST(1),ST
  186.           RET
  187. Frac      ENDP
  188.  
  189. Fact      PROC    C Num: QWORD
  190.           PUBLIC  C Fact
  191.           LOCAL   Buc: WORD
  192.           LOCAL   Tmp: QWORD
  193.           FLD     Num
  194.           FSTP    Tmp
  195.           CALL    Ent
  196.           FIST    Buc
  197.           MOV     CX,Buc
  198.           CMP     CX,33
  199.           JA      @@2
  200.           OR      CX,CX
  201.           JZ      @@3
  202. @@1:      DEC     CX
  203.           JZ      @@5
  204.           FILD    Buc
  205.           FLD1
  206.           FSUBP
  207.           FIST    Buc
  208.           FMUL
  209.           JMP     @@1
  210. @@2:      PUSH    Overflow
  211.           PUSH    CS
  212.           PUSH    OFFSET szFACT
  213.           SUB     SP,8
  214.           MOV     BX,SP
  215.           FSTP    QWORD PTR SS:[BX]
  216.           CALL    ErrorFuncion
  217.           ADD     SP,14
  218.           JMP     SHORT @@4
  219. @@3:      FIST    Buc
  220. @@4:      FLD1
  221. @@5:      RET
  222. Fact      ENDP
  223.  
  224. Mult      PROC    NEAR
  225.           FMULP
  226.           RET
  227. Mult      ENDP
  228.  
  229. Divid     PROC    NEAR
  230.           FLDZ
  231.           FCOMP   ST(1)
  232.           FSTSW   AX
  233.           SAHF
  234.           JZ      @@1
  235.           FDIVP
  236.           RET
  237. @@1:      MOV     ErrorMatemat,1
  238.           FADDP
  239.           CALL    DivisionPorCero
  240.           RET
  241. Divid     ENDP
  242.  
  243. Suma      PROC    NEAR
  244.           FADDP
  245.       RET
  246. Suma      ENDP
  247.  
  248. Resta     PROC    NEAR
  249.       FSUBP
  250.       RET
  251. Resta     ENDP
  252.  
  253. Potencia  PROC    NEAR
  254.           LOCAL   Base: QWORD, Expn: QWORD
  255.           FST     Base
  256.           CALL    Ent
  257.           FCOMP   ST(1)
  258.           FSTSW   AX
  259.           SAHF
  260.           JE      @@1
  261.           FSTP    Expn
  262.           FSTP    Base
  263.           CALL    pow
  264. @@0:      RET
  265. @@1:      FISTP   IntTemp
  266.           MOV     AX,IntTemp
  267.           OR      AX,AX
  268.       JZ      @@4
  269.           JG      @@2
  270.       NEG     AX
  271.           FLD1
  272.           FDIVRP
  273. @@2:      FST     Base
  274. @@3:      DEC     AX
  275.       JZ      @@0
  276.           FMUL    Base
  277.           JMP     @@3
  278. @@4:      FSTP    Base
  279.           FLD1
  280.           JMP     @@0
  281. Potencia  ENDP
  282.  
  283.  
  284. @TBaseFunc@Operador$qzc PROC Oper: BYTE, @Self: DWORD
  285.       PUBLIC  @TBaseFunc@Operador$qzc
  286.           MOV     AL,Oper
  287.       MOV     CX,OFFSET Mult
  288.           CMP     AL,'+'
  289.           JNE     @@1
  290.           MOV     CX,OFFSET Suma
  291. @@1:      CMP     AL,'-'
  292.           JNE     @@2
  293.           MOV     CX,OFFSET Resta
  294. @@2:      CMP     AL,'/'
  295.       JNE     @@3
  296.       MOV     CX,OFFSET Divid
  297. @@3:      CMP     AL,'^'
  298.           JNE     @@4
  299.           MOV     CX,OFFSET Potencia
  300. @@4:      LES     BX,@Self
  301.       MOV     TBaseFunc@DirOper,CX
  302.       RET
  303. @TBaseFunc@Operador$qzc ENDP
  304.  
  305.  
  306. @TVariable@Result$qv PROC @Self: DWORD
  307.           PUBLIC  @TVariable@Result$qv
  308.           LOCAL   Valor: QWORD
  309.           LES     BX,@Self
  310.           LES     BX,TVariable@Variable
  311.           FLD     QWORD PTR ES:[BX]
  312.           LES     BX,@Self
  313.           LES     BX,TBaseFunc@SigFunc
  314.           MOV     AX,ES
  315.           OR      AX,BX
  316.           JZ      @@1
  317.           FSTP    Valor
  318.           Virtual TBaseFunc,Result,Actual
  319.           FLD     Valor
  320.           LES     BX,@Self
  321.           CALL    TBaseFunc@DirOper
  322. @@1:      RET
  323. @TVariable@Result$qv ENDP
  324.  
  325. @TNumero@Result$qv PROC @Self: DWORD
  326.           PUBLIC  @TNumero@Result$qv
  327.           LOCAL   Valor: QWORD
  328.           LES     BX,@Self
  329.           FLD     TNumero@Numero
  330.           LES     BX,@Self
  331.           LES     BX,TBaseFunc@SigFunc
  332.           MOV     AX,ES
  333.           OR      AX,BX
  334.           JZ      @@1
  335.           FSTP    Valor
  336.           Virtual TBaseFunc,Result,Actual
  337.           FLD     Valor
  338.           LES     BX,@Self
  339.           CALL    TBaseFunc@DirOper
  340. @@1:      RET
  341. @TNumero@Result$qv ENDP
  342.  
  343. @TFunc@Result$qv  PROC @Self: DWORD
  344.           PUBLIC  @TFunc@Result$qv
  345.           LOCAL   Valor: QWORD
  346.           LES     BX,@Self
  347.           Virtual TBaseFunc,Result,TFunc@Subfunc
  348.           LES     BX,@Self
  349.           LES     BX,TBaseFunc@SigFunc
  350.           MOV     AX,ES
  351.           OR      AX,BX
  352.           JZ      @@1
  353.           FSTP    Valor
  354.           Virtual TBaseFunc,Result,Actual
  355.           FLD     Valor
  356.           LES     BX,@Self
  357.           CALL    TBaseFunc@DirOper
  358. @@1:      RET
  359. @TFunc@Result$qv  ENDP
  360.  
  361. @TSumatorio@Result$qv PROC @Self: DWORD
  362.           PUBLIC  @TSumatorio@Result$qv
  363.           Local   Temp: WORD
  364.           LES     BX,@Self
  365.           MOV     CX,TSerie@Desde
  366.           MOV     DX,TSerie@Hasta
  367.           LES     BX,TFunc@Subfunc
  368.           MOV     Temp,CX
  369.           FLDZ
  370. @@1:      CMP     DX,Temp
  371.           JL      @@2
  372.           FILD    Temp
  373.           FSTP    varN
  374.           PUSH    DX
  375.           PUSH    ES
  376.           PUSH    BX
  377.           Virtual TBaseFunc,Result,Actual
  378.           FADDP     
  379.           POP     BX
  380.           POP     ES
  381.           POP     DX
  382.           INC     Temp
  383.           JMP     @@1
  384. @@2:      RET
  385. @TSumatorio@Result$qv ENDP
  386.  
  387. @TProductorio@Result$qv PROC @Self: DWORD
  388.           PUBLIC  @TProductorio@Result$qv 
  389.           Local   Temp: WORD
  390.           LES     BX,@Self
  391.           MOV     CX,TSerie@Desde
  392.           MOV     DX,TSerie@Hasta
  393.           LES     BX,TFunc@Subfunc
  394.           MOV     Temp,CX
  395.           FLD1
  396. @@1:      CMP     DX,Temp
  397.           JL      @@2
  398.           FILD    Temp
  399.           FSTP    varN
  400.           PUSH    DX
  401.           PUSH    ES
  402.           PUSH    BX
  403.           Virtual TBaseFunc,Result,Actual
  404.           FMULP     
  405.           POP     BX
  406.           POP     ES
  407.           POP     DX
  408.           INC     Temp
  409.           JMP     @@1
  410. @@2:      RET
  411. @TProductorio@Result$qv ENDP
  412.  
  413. @TFuncMat@Result$qv PROC @Self: DWORD
  414.           PUBLIC  @TFuncMat@Result$qv
  415.           LOCAL   Valor: QWORD
  416.           LES     BX,@Self
  417.           Virtual TBaseFunc,Result,TFunc@Subfunc
  418.           FSTP    Valor
  419.           LES     BX,@Self
  420.           CALL    TFuncMat@FuncMat
  421.           LES     BX,@Self
  422.           LES     BX,TBaseFunc@SigFunc
  423.           MOV     AX,ES
  424.           OR      AX,BX
  425.           JZ      @@1
  426.           FSTP    Valor
  427.           Virtual TBaseFunc,Result,Actual
  428.           FLD     Valor
  429.           LES     BX,@Self
  430.           CALL    TBaseFunc@DirOper
  431. @@1:      RET
  432. @TFuncMat@Result$qv ENDP
  433.  
  434. @TFuncion@Result$qv PROC @Self: DWORD
  435.       PUBLIC  @TFuncion@Result$qv
  436.       MOV     ErrorMatemat,0
  437.       LES     BX,@Self
  438.       CMP     TFuncion@Error,0
  439.       JNE     @@1
  440.       LES     BX,TFuncion@Funcion
  441.       MOV     AX,ES
  442.       OR      AX,BX
  443.       JZ      @@1
  444.           Virtual TBaseFunc,Result,Actual
  445.       MOV     AX,ErrorMatemat
  446.           LES     BX,@Self
  447.           MOV     TFuncion@ErrorCalc,AX
  448. @@0:      RET
  449. @@1:      FLDZ
  450.       JMP     @@0
  451. @TFuncion@Result$qv ENDP
  452.  
  453. @TFuncion@HayError$qv PROC @Self: DWORD
  454.       PUBLIC  @TFuncion@HayError$qv
  455.       LES     BX,@Self
  456.       MOV     AX,TFuncion@Error
  457.       OR      AX,TFuncion@ErrorCalc
  458.       RET
  459. @TFuncion@HayError$qv ENDP
  460.  
  461.  
  462. @TFuncion@Parentesis$qmit1 PROC Ini: DWORD, Fin: DWORD, @Self: DWORD
  463.           PUBLIC  @TFuncion@Parentesis$qmit1
  464.           PUSH    DS
  465.           PUSH    SI
  466.           PUSH    DI
  467.           LDS     BX,Ini
  468.           MOV     CX,[BX]
  469.           LDS     BX,Fin
  470.           MOV     DI,[BX]
  471.           LES     BX,@Self
  472.           LDS     BX,TFuncion@funcion
  473.           XOR     AX,AX
  474. @@1:      MOV     SI,CX
  475.           CMP     SI,DI
  476.           JZ      @@4
  477.           CMP     BYTE PTR [BX+SI],'('
  478.           JNE     @@4
  479.           MOV     DX,1
  480. @@2:      INC     SI
  481.           CMP     SI,DI
  482.           JE      @@4
  483.           CMP     BYTE PTR [BX+SI],'('
  484.           JNE     @@3
  485.           INC     DX
  486.           JMP     @@2
  487. @@3:      CMP     BYTE PTR [BX+SI],')'
  488.           JNE     @@2
  489.           DEC     DX
  490.           JNZ     @@2
  491.           INC     SI
  492.           CMP     SI,DI
  493.           JNE     @@4
  494.           INC     CX
  495.           DEC     DI
  496.           MOV     AX,1
  497.           JMP     @@1
  498. @@4:      LDS     BX,Ini
  499.           MOV     [BX],CX
  500.           LDS     BX,Fin
  501.           MOV     [BX],DI
  502.           POP     DI
  503.           POP     SI
  504.           POP     DS
  505.           RET
  506. @TFuncion@Parentesis$qmit1 ENDP
  507.  
  508. @TFuncion@BuscaNumero$qmiinzc PROC Ini: DWORD, Fin: WORD, Numero: DWORD, @Self: DWORD
  509.           PUBLIC  @TFuncion@BuscaNumero$qmiinzc
  510.           PUSH    DS
  511.           PUSH    SI
  512.           PUSH    DI
  513.           LES     BX,Ini
  514.           MOV     CX,ES:[BX]
  515.           LES     BX,@Self
  516.           LDS     SI,TFuncion@funcion
  517.           ADD     SI,CX
  518.           PUSH    SI
  519.           XOR     BX,BX
  520.           CLD
  521. @@0:      CMP     CX,Fin
  522.           JAE     @@6
  523.           LODSB
  524.       CMP     AL,'0'
  525.       JB      @@00
  526.       CMP     AL,'9'
  527.       JBE     @@1
  528.           CMP     AL,'E'
  529.           JZ      @@3
  530. @@00:     CMP     AL,'-'
  531.           JZ      @@5
  532.           CMP     AL,'+'
  533.           JZ      @@5
  534.       CMP     AL,'.'
  535.       JNZ     @@6
  536. @@1:      XOR     BL,BL
  537. @@2:      INC     CX
  538.           JMP     @@0
  539. @@3:      OR      BH,BH
  540.           JNZ     @@4
  541.           MOV     BX,0101H
  542.           JMP     @@2
  543. @@4:      LES     BX,@Self
  544.           MOV     TFuncion@Error,1
  545.           INC     CX
  546.           JMP     SHORT @@6
  547. @@5:      OR      BL,BL
  548.           JNZ     @@1
  549. @@6:      LES     BX,Ini
  550.           MOV     AX,CX
  551.           XCHG    AX,ES:[BX]
  552.           SUB     CX,AX
  553.           POP     SI
  554.           LES     DI,Numero
  555.           REP     MOVSB
  556.           XOR     AL,AL
  557.           STOSB
  558.           POP     DI
  559.           POP     SI
  560.           POP     DS
  561.           RET
  562. @TFuncion@BuscaNumero$qmiinzc ENDP
  563.  
  564. @TFuncion@BuscaSumando$qiimi PROC Ini: WORD, Fin: WORD, Pos: DWORD, @Self: DWORD
  565.           PUBLIC  @TFuncion@BuscaSumando$qiimi
  566.           PUSH    DS
  567.           PUSH    SI
  568.           LES     BX,@Self
  569.           LDS     SI,TFuncion@funcion
  570.           MOV     CX,Ini
  571.           ADD     SI,CX
  572.           XOR     DX,DX
  573.           CLD
  574.           JMP     SHORT @@1
  575. @@0:      INC     CX
  576. @@1:      CMP     CX,Fin
  577.           JAE     @@6
  578.           LODSB
  579.           CMP     AL,'('
  580.           JNZ     @@2
  581.           INC     DX
  582.           JMP     @@0
  583. @@2:      CMP     AL,')'
  584.           JNZ     @@4
  585.           DEC     DX
  586.           JGE     @@0
  587. @@3:      MOV     TFuncion@Error,1
  588.           JMP     SHORT @@7
  589. @@4:      CMP     AL,'+'
  590.           JE      @@5
  591.           CMP     AL,'-'
  592.           JNE     @@0
  593. @@5:      OR      DX,DX
  594.           JG      @@0
  595.           CMP     CX,Ini
  596.           JZ      @@0
  597.           MOV     AH,[SI-2]
  598.           CMP     AH,'E'
  599.           JZ      @@0
  600.           CMP     AH,'*'
  601.           JZ      @@0
  602.           CMP     AH,'/'
  603.           JZ      @@0
  604.           CMP     AH,'^'
  605.           JZ      @@0
  606. @@6:      CMP     CX,Ini
  607.           JE      @@3
  608. @@7:      LDS     BX,Pos
  609.           MOV     [BX],CX
  610.           POP     SI
  611.           POP     DS
  612.           RET
  613. @TFuncion@BuscaSumando$qiimi ENDP
  614.  
  615. @TFuncion@BuscaProducto$qiimi PROC Ini: WORD, Fin: WORD, Pos: DWORD, @Self: DWORD
  616.           PUBLIC  @TFuncion@BuscaProducto$qiimi
  617.           PUSH    DS
  618.           PUSH    SI
  619.           LES     BX,@Self
  620.           LDS     SI,TFuncion@funcion
  621.           MOV     CX,Ini
  622.           ADD     SI,CX
  623.           XOR     DX,DX
  624.           CLD
  625.           JMP     SHORT @@1
  626. @@0:      INC     CX
  627. @@1:      CMP     CX,Fin
  628.           JE      @@6
  629.           LODSB
  630.           CMP     AL,'*'
  631.           JE      @@2
  632.           CMP     AL,'/'
  633.           JNE     @@3
  634. @@2:      OR      DX,DX
  635.           JZ      @@6
  636.           JMP     @@0
  637. @@3:      CMP     AL,'('
  638.           JNE     @@4
  639.           INC     DX
  640.           JMP     @@0
  641. @@4:      CMP     AL,')'
  642.           JNE     @@0
  643.           DEC     DX
  644.           JNS     @@0
  645. @@5:      MOV     TFuncion@Error,1
  646.           JMP     SHORT @@7
  647. @@6:      CMP     CX,Ini
  648.           JE      @@5
  649. @@7:      LDS     BX,Pos
  650.           MOV     [BX],CX
  651.           POP     SI
  652.           POP     DS
  653.           RET
  654. @TFuncion@BuscaProducto$qiimi ENDP
  655.  
  656. @TFuncion@BuscaPotencia$qiimi PROC Ini: WORD, Fin: WORD, Pos: DWORD, @Self: DWORD
  657.           PUBLIC  @TFuncion@BuscaPotencia$qiimi
  658.           PUSH    DS
  659.           PUSH    SI
  660.           LES     BX,@Self
  661.           LDS     SI,TFuncion@funcion
  662.           MOV     CX,Ini
  663.           ADD     SI,CX
  664.           XOR     DX,DX
  665.           CLD
  666.           JMP     SHORT @@1
  667. @@0:      INC     CX
  668. @@1:      CMP     CX,Fin
  669.           JE      @@5
  670.           LODSB
  671.           CMP     AL,'^'
  672.           JNZ     @@2
  673.           OR      DX,DX
  674.           JZ      @@5
  675.           JMP     @@0
  676. @@2:      CMP     AL,'('
  677.           JNZ     @@3
  678.           INC     DX
  679.           JMP     @@0
  680. @@3:      CMP     AL,')'
  681.           JNZ     @@0
  682.           DEC     DX
  683.           JGE     @@0
  684. @@4:      MOV     TFuncion@Error,1
  685.           JMP     SHORT @@6
  686. @@5:      CMP     CX,Ini
  687.           JE      @@4
  688.           OR      DX,DX
  689.           JNZ     @@4
  690. @@6:      LDS     SI,Pos
  691.           MOV     [SI],CX
  692.           POP     SI
  693.           POP     DS
  694.           RET
  695. @TFuncion@BuscaPotencia$qiimi ENDP
  696.  
  697. @TFuncion@BuscaParametro$qiimi PROC Ini: WORD, Fin: WORD, Pos: DWORD, @Self: DWORD
  698.           PUBLIC  @TFuncion@BuscaParametro$qiimi
  699.           PUSH    DS
  700.           PUSH    SI
  701.           LES     BX,@Self
  702.           LDS     SI,TFuncion@funcion
  703.           MOV     CX,Ini
  704.           ADD     SI,CX
  705.           CMP     BYTE PTR [SI],'('
  706.           JNE     @@3
  707.           XOR     DX,DX
  708.           CLD
  709. @@1:      CMP     CX,Fin
  710.           JZ      @@4
  711.           LODSB
  712.           INC     CX
  713.           CMP     AL,'('
  714.           JNE     @@2
  715.           INC     DX
  716.           JMP     @@1
  717. @@2:      CMP     AL,')'
  718.           JNE     @@1
  719.           DEC     DX
  720.           JZ      @@4
  721.           JMP     @@1
  722. @@3:      MOV     TFuncion@Error,1
  723. @@4:      LDS     BX,Pos
  724.           MOV     [BX],CX
  725.           POP     SI
  726.           POP     DS  
  727.           RET
  728. @TFuncion@BuscaParametro$qiimi ENDP
  729.  
  730.  
  731. @EsCaract$qzc PROC
  732.       PUBLIC  @EsCaract$qzc
  733.           PUSH    BP
  734.           MOV     BP,SP
  735.       MOV     CL,[BP+6]
  736.       XOR     AX,AX
  737.       CMP     CL,'A'
  738.       JB      @@1
  739.       CMP     CL,'Z'
  740.       JA      @@1
  741.       INC     AX
  742. @@1:      POP     BP
  743.           RET
  744. @EsCaract$qzc ENDP
  745.  
  746. @EsNumero$qzc PROC
  747.       PUBLIC  @EsNumero$qzc
  748.       PUSH    BP
  749.       MOV     BP,SP
  750.       MOV     CL,[BP+6]
  751.       XOR     AX,AX
  752.       CMP     CL,'.'
  753.       JZ      @@1
  754.       CMP     CL,'0'
  755.       JB      @@2
  756.       CMP     CL,'9'
  757.       JA      @@2
  758. @@1:      INC     AL
  759. @@2:      POP     BP
  760.       RET
  761. @EsNumero$qzc ENDP
  762.  
  763.       END
  764.